var gulp = require('gulp');
//引入服务模块
var webserver = require('gulp-webserver');
//url fs
var url = require('url');
var fs = require('fs');
// sass
var sass = require('gulp-sass');
//gulp-minify-css
var minifyCss = require('gulp-minify-css');
//js
var uglify = require('gulp-uglify');
var webpack = require('gulp-webpack');

//version
var named = require('vinyl-named');
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector');
var watch = require('gulp-watch');
var sequence = require('gulp-watch-sequence');

//var minifyJTML = require('gulp-minify-html');

gulp.task('webserver',function(){
	gulp.src('www'). //默认打开'www'文件夹下的index.html文件  打开其他文件可以直接在地址栏里输入路径跟文件名
	pipe(webserver({
		livereload:true, //热加载，代码的自动刷新
		open:true,//自动打开文件（即浏览器）
		
		middleware:function(req,res,next){		
			var urlObj = url.parse(req.url,true),
			method = req.method;
			switch(urlObj.pathname){
				case '/api/skill.php':  //配置地址
				res.setHeader('Content-Type','application/json');//打开类型
				fs.readFile('mock/skill.json','utf-8',function(err,data){
					res.end(data);
				})
				return;
				
				case '/api/project.php':  //配置地址
				res.setHeader('Content-Type','application/json');//打开类型
				fs.readFile('mock/project.json','utf-8',function(err,data){
					res.end(data);
				})
				return;
				
				case '/api/work.php':  //配置地址
				res.setHeader('Content-Type','application/json');//打开类型
				fs.readFile('mock/work.json','utf-8',function(err,data){
					res.end(data);
				})
				return;
				
				case '/api/me.php':  //配置地址
				res.setHeader('Content-Type','application/json');//打开类型
				fs.readFile('mock/me.json','utf-8',function(err,data){
					res.end(data);
				})
				return;
				
			}
			next();
		}
	}))	
})

//www dist(配置，分配)
//复制首页文件
gulp.task('copy-index',function(){
	return gulp.src('./src/index.html')
	.pipe(gulp.dest('./www'));
})
//复制图片文件，静态资源文件
gulp.task('copy-images',function(){
	return gulp.src('./src/images/**')  //**所有文件（包含自文件夹里的文件）
	.pipe(gulp.dest('./www/images'));
})
//复制资源文件
gulp.task('copy-resources',function(){
	return gulp.src('./src/resources/**')
	.pipe(gulp.dest('./www/resources'));
})

////复制js文件
//gulp.task('copy-js',function(){
//	return gulp.scr('./src/**/*.js')
//	.pipe(gulp.dest('./www/js'))
//})

//sass转化
gulp.task('sass',function(){
	return gulp.src('./src/css/**/*.scss')
	.pipe(sass()) //执行sass编译
	.pipe(gulp.dest('./www/css'));
})

//模块化开发！！！
var jsFiles = ['src/js/index.js'];
//var jsFiles = 'src/js/*.js';
gulp.task('packjs',function(){
	return gulp.src(jsFiles)
	.pipe(named()) //记住文件名
	.pipe(webpack()) //打包index.js中的依赖
	.pipe(uglify()) //压缩代码
	.pipe(gulp.dest('./www/js'));
})
 
// //版本控制， css、js的代码版本控制。不是svn／git的代码控制
// var cssDistFiles = './www/css/index.css';
// var jsDistFiles = './www/js/index.js';
// 
// //css ver控制
// gulp.task('verCss',function(){
// 	return gulp.src(cssDistFiles)
// 	.pipe(rev()) //生成新版本
// 	.pipe(gulp.dest('./www/css'))
// 	.pipe(rev.manifest()) //生成json（里面写着对应的版本）
// 	.pipe(gulp.dest('./www/ver/css'))  //将生成的json放到www/ver/css
// })
// //js ver控制
// gulp.task('verJs',function(){
// 	return gulp.src(jsDistFiles)
// 	.pipe(rev())
// 	.pipe(gulp.dest('./www/js'))
// 	.pipe(rev.manifest())
// 	.pipe(gulp.dest('./www/ver/js'))
// })
//
////html 版本 字符串的替换
//gulp.task('html',function(){
//	return gulp.src(['./www/ver/**/*.json','./www/**/*.html']) //找到俩个要执行的文件
//	.pipe(revCollector({replaceReved:true}))  //版本选择 （选则json中对应的版本）
//	.pipe(gulp.dest('./www/'))
//})

//监视任务
gulp.task('watch',function(){
	gulp.watch('./src/index.html',['copy-index']);
	gulp.watch('./src/images/**',['copy-images']);
	gulp.watch('./src/resources/**',['copy-resources']);
//	gulp.watch('./src/js/**',['copy-js']);
	
	//队列
	var queue = sequence(300);  //因为这些程序运行速度慢 必须加入队列一个一个运行
	watch('./src/js/**/*.js',{
		name:'JS',
		emiOnGlob:false
//	},queue.getHandler('packjs','verJs','html'))
	},queue.getHandler('packjs'))
	
	watch('./src/css/**/*.scss',{
		name:'CSS',
		emitOnGlob:false
//	},queue.getHandler('packjs','verJs','html'))
	},queue.getHandler('sass'))
	
	
})

gulp.task('default',['webserver','watch']);


